AWS Systems Manager Automation のクロスアカウントアクセスを試してみる
はじめに
Systems Manager(SSM) Automation は運用作業自動化に役立つ機能です。 EC2インスタンスや他AWSリソースに対する 一連の操作を実施できます。 この一連の操作は SSMドキュメントと呼ばれる形式で管理されます。 AWS管理のSSMドキュメントもあります。
この SSM Automation は クロスリージョン, クロスアカウント 対応です。 以下ドキュメントにある手順で実現できます。
今回は クロスアカウントで Automation を実行 して、挙動など確かめてみました。
事前準備
2つのロールを事前に準備しておきましょう。
- AWS-SystemsManager-AutomationAdministrationRole
- 集中管理用のアカウント(管理アカウント)上に作成する SSMロールです
- AWS-SystemsManager-AutomationExecutionRole
- 実際にAutomationが実行されるアカウント(メンバーアカウント)上に作成する SSMロールです
- 上述の AdminitrationRole から Assume Role されることで実行されます
ロール作成用の CFnテンプレートは こちらの公式ドキュメント からダウンロードできます。 ExecutionRole は必要に応じて StackSet などで複数アカウントへ展開すると良いでしょう。
(注) 実行する Automation次第では ExecutionRole の権限が足りない可能性があります。 必要に応じて追加で権限を付与してください。
試してみた
今回は AWS-EnableS3BucketEncryption (S3のデフォルト暗号化を有効にする AWS管理のSSMドキュメント) を使って クロスアカウントアクセスを試してみます。
(注) この場合、 ExecutionRole の権限に s3:PutEncryptionConfiguration
を足す必要があります。
管理アカウントへログインして、 [Systems Manager] > [自動化] から [オートメーションを実行] を選択します。
オートメーションドキュメントを選択して [次へ] を選択します。
実行形式として [複数のアカウントとリージョン] を選択します。
下図のようにターゲットを指定しました。
- アカウントと組織単位(OU): メンバーアカウントID
- AWSリージョン: ap-northeast-1(東京)
- オートメーション実行ロール: AWS-SystemsManager-AutomationExecutionRole
入力パラメータを埋めます。 AutomationAssumeRole
には
AWS-SystemsManager-AutomationAdministrationRole を指定しましょう。
[実行] を選択して、Automationを走らせます。
問題なければ以下のように ステータス: 成功 となります。
メンバーアカウント上 S3バケットのデフォルト暗号化が有効になったことも確認しました。
いろいろ確認・調査
実行結果の確認について
管理アカウント上ではメンバーアカウントへ実行した
aws:executeAutomation
全体の結果が確認できるようです。
Automation内の各ステップの結果は メンバーアカウント上で確認できます。
通知について
通知は EventBridge を活用して実装できます。 例えば 以下ブログのように Automation が失敗したときに 通知するような構成を作れます。
ログについて
[オートメーション] > [設定] から CloudWatch Logs へのログ出力を有効化出来ます。
※ aws:executeScript
アクションのみログとして保存される点に注意。
例えば今回の Automation( AWS-EnableS3BucketEncryption )では
aws:executeScript
アクション は使われていないので、CloudWatch Logs にはログが流れません。
Systems Manager は、
aws:executeScript
アクションを使用しないドキュメント用にはロググループまたは ログストリームを作成しません。ドキュメントがaws:executeScript
を使用する場合、CloudWatch Logs に 送信される出力は、それらのアクションにのみ関係します。– 引用: CloudWatch Logs を使用した自動アクション出力のログ記録 - AWS Systems Manager
おわりに
SSM Automation のクロスアカウントアクセスを試してみました。 中央集権的に Automation を管理・トリガーできるのは良いですね。
ただ、以下ポイントは少し辛く感じました。
- ログの出力制限
- 一部実行結果はメンバーアカウント上でしか確認できない
最低限 通知は実装して、失敗時に気付ける仕組みは作りたいですね。
参考
- Running automations in multiple AWS Regions and accounts - AWS Systems Manager
- サーバーアクセスログを使用したリクエストのログ記録 - Amazon Simple Storage Service
- AWS-ConfigureS3BucketLogging - AWS Systems Manager Automation runbook reference
- Amazon EventBridge を使用して Systems Manager イベントをモニタリングする - AWS Systems Manager
- Configルール・修復を使ってS3アクセスログの設定有無の検知・対応を行う | DevelopersIO
- SSM Automationが失敗したら通知するCloudWatch Eventを設定してみた | DevelopersIO